Let's say, for the sake of argument, that every frame takes the same amount of time: Δt. So if you say that t milliseconds have elapsed since you started your game, you could also say that (n · Δt) milliseconds have passed (n frames that each took Δt milliseconds).
You're applying the change to the
translation variable every frame, which you can mathematically think of as multiplying by the number of frames that have passed so far. And using the fact that we already know the units of the number "3" (they are "units per millisecond"), we can put together an equation for the current translation, complete with units:
Let's cancel a few of the units:
What do we have now?
Remember that t is the number of milliseconds that have elapsed since you started your game. That's simple enough! Every time your t goes up by one, your translation increases by 3 units. That's the exactly what "3 units per millisecond" means. And that's why it works.
This works even when your velocity (the "3") changes frame-by-frame, as well as when the length of a frame changes. Explaining that properly requires calculus and an explanation of numerical integration. But it basically boils down to this same logic.
There are variations of this, yes, but this is by far the most common; it works pretty much anywhere you're adding some value to a variable every frame.