In a normal approach what we can do is... every time on every movement in any ball, check if any ball is colliding with any other ball.
Then we can put some optimization in this approach by keeping safe distance variable between every pair of balls. Safe distance means the distance between two balls, which is available before collision. If those two balls moves by that total safe distance, no need to check if they are colliding, once the accumulation of their movement is more than safe distance, then only we will check collision and calculate safe distance for next check.
For example for your case, if two balls are 100 m far from each other then safe distance is 60 m, so we will not check collision until unless both these balls move 60m distance.
this is just my thought. others can tell better approaches.