Actually, the weak springs that I was thinking about (and discussed in the documentation) are a type of constraint that connect the node to the ground ("Setup > Constraints > 3D Spring Support"). They are not an element that connects two nodes of the model together.
In short, pick any three nodes (as long they are not in a straight line), and apply the 3D spring supports. Fix the XYZ directions. Set the stiffness to a small value. Keep in mind that these springs do transmit load from the model to the ground. That's why you set the stiffness to a "small" value so that the magnitude of the load transmitted (= displacement * stiffness) is insignificant compared to the appied load (and the accuracy of FEA in general). Give it a try!
Going a step further in the explanation, the issue with contact in a static analysis is that the solver does not know which nodes are in contact until the displacements are calculated, and it cannot calculate the displacements until it knows which nodes are in contact. So it becomes an iterative solution where it assumes some nodes are in contact, calculates the displacement, and adjusts the assumptions. The problem is that if one of those iterations has too few nodes in contact, it is possible for the part to move a large distance, and for some reason the solution is not able to recover from that situation. By imagining that the contact elements do not exist, you can determine which parts are not statically stable. By fixing 3 points (not in a straight line) in X, Y, and Z translation, you create a statically stable part (it cannot translate in X, Y, or Z, and it cannot rotate about X, Y, or Z.) Once the part is statically stable, an interation during the solution that has too few nodes in contact will result in a valid solution but with a "large" displacement. Based on the calculated result, the solver detects that some more nodes would have come into contact, and it continues to the next iteration with the additional contact. Eventually, it converges to a solution.