You can't assign a 32bit number to a 16bit variable without explicitly converting it. It is a narrowing conversion that could fail or result in data loss, because not all possible 32bit values can fit in a 16bit storage.
All arithmetic operators on 16bit values in C# widens to Int32. You need to convert or cast the result to 16bit if you need that.
You should also use the C# data types short/int/long in code, rather than the .Net framework structure types Int16/Int32/Int64.