Those packets are still late. Even if you send 1M packets every second, there is still lag. Certain packet is packed at time t1 and it arrives at t1+ping/2.
You send positions of other player to everyone. I assume you then do something like this:
player.Position = new Vector2(readNextPlayerX(),ReadNextPlayerY());
You set that coordinate you sent, directly to player with matching id?
When you get new coordinate, you just apply it and if it has changed a lot, you get jerky movement. Difference between last known position and just updated position is so big, that it just leaps to it. To fix this, you have to use "lerp" to smoothly move towards new coordinates. This is called Interpolation.
Instead of immediately move to new position, you have to keep record of you new positions, sent from server. Then in every update loop, push player towards next position. Lerp is a way to move towards other point, certain amount. This "amount" is called "smoothingFactor". It can be number between 0f and 1f. 1f means that vector1 changes to vector2 in:
if it's 0.5f, vector1 moves towards vector2 to halfway. So if distance was 10, its now 5.
Depending on your smoothingFactor, you can change your movement from jerky, to smooth.
You are sending 60 times per second. That's way too much. If you have 10 players and you send 60*2 floats and int to server, that means server sends 9*60*2 floats and 9*int to everyone, every second. 20 or 30 times is better. You collect data on server, for player inputs. Generate movement packets from that data. Every 30ms you send collected data to players.
Are you using your own networking code, or some library? Packet dropping can cause this also.