Casting the unsigned int that word() returns to an int makes NO sense.
int result2 = (int)(result);
Casting the unsigned int, which can hold a value between 0 and 65535 to an int, which can hold -32768 to +32767, makes no sense when your values between 0 and 60000.
Why are you thinking you can use ints to hold values in the range 0 to 60000 when you KNOW that that is the range of an unsigned int?