Let's assume your vehicle is travelling along at a given speed \$v\$ in metres per second - it may or may not be able to sustain this speed on its own, but we'll ignore that for now and use this as a stepping stone to determine the speed it can sustain.
In one second, the car moves forward \$d = v \times 1 \text{s}\$ metres.
That's \$\frac d {2 \pi r}\$ turns of a wheel with radius \$r\$, so the wheel is turning at a rate of \$\frac {v \times 1 \text{s}} {2 \pi r} \text Hz\$
For a combined gearing and differential ratio \$g\$, that means your engine is turning at: \$g \frac {v \times 1 \text{s}} {2 \pi r} \text Hz = \frac {g v \times 1 \text{s}}{120 \pi r} \text{RPM}\$
We can use this RPM rate to sample your engine's torque curve and compute the Forward Force as described in your question.
For very high initial values of the speed \$v\$, this force will be negative. At such high RPM, your engine offers too little torque to overcome the high drag at that speed.
So then you try a lower value of \$v\$ - maybe the one corresponding to the RPM where your engine achieves its peak torque. At this lower speed, you get a positive value of Forward Force - your engine has enough surplus torque to not just maintain this speed, but accelerate beyond it.
So now we have two speed values, one that gives us a positive force, one that gives us a negative force. At some speed value between those two points, the force value must cross zero. At that specific speed, the torque our engine puts out and the resistance the car faces are exactly in balance, and we can maintain the speed but not accelerate above it. That's our maximum speed for this gear.
We can find this maximum speed by binary search: try the speed halfway between the two speed we've tried so far.
If this new halfway speed yields a positive force, replace the previous speed that gave us a positive force by this one - we have a new lower bound.
If this new halfway speed yields a negative force, replace the previous speed that gave us a negative force by this one - we have a new upper bound.
Each time we do one of these replacements, we reduce our uncertainty about the maximum speed by a half. Repeat until the lower and upper bounds converge to your desired precision.