To find the 'most visible side' of the cube, take dot products of the cube's X, Y, and Z axes with the 'look vector' - that is, the direction the camera is looking; the axis with the largest absolute dot product will be the axis most aligned with that vector, and the sign indicates which of the two faces along that axis ('positive' or 'negative') is facing the viewer. For instance, assuming you have your cube defined from (-1, -1, -1) to (+1, +1, +1), then dot products of -0.25, 0.3, and -0.92 would mean that the Z faces are most aligned with the view; whether that's the face z=-1 or the face z=1 depends on your particular conventions (e.g., whether positive Z goes into or out of the screen).
Note that this doesn't give you enough information to fully snap the cube into place, though - for that, you'd need not just the side of the cube facing the viewer but also the side of the cube facing in some orthogonal direction - for instance, which side of the cube is facing rightwards. You can find that using the same general idea, only dotting with (the worldspace transformation of) your screenspace X axis instead of Z (which is the look vector).
Once you have these two faces (or equivalently, the two axes - e.g., (0, 0, -1) and (1, 0, 0)), you can cross them to find your third 'aligned axis'; that's enough to give you an orientation matrix, and you can then Slerp from your current orientation to this target orientation. There are a couple of gotchas to be aware of with this approach - specifically, you have to be careful about how you handle ties to make sure that you never accidentally assign the same faces to your 'facing the viewer' and 'facing right' axes.