Adding to previous message: The higher in interrupt frequency you go the less "resolution" in interrupt frequency you'll get. As an example, preloading the the timer with 65535 would make it go a single tick bwetween interrupts, in other words an interrupt frequency of 2.5Mhz when using a 20MHz crystal. (Won't work in reality but serves the purpose of this discussion).

Now, preloading the timer with 65534 would cut that interrupt frequency in half to 1.25Mhz.

At the other end of the spectrum, going from a preload value of 0 to a preload value of 1 only changes the interrupt frequency by something like 0.001Hz.

The higher the "base frequency" is (the PIC clock in this case) the more resolution you'll get at the upper end.

So, in order to get a linear output frequency you need to calculate the correct preload value, either at runtime ot use a lookuptable and interpolate between points or something.