A one-time fee incentives them to not pay late, but once they are already late, there is no more incentive since they have already incurred the 5% fee.
One nice idea we've come across is a trivial discount for early / on time payment (~1-3%). We've heard anecdotally that it helps!