My friend recommended to put a small percent late payment fee, stated in the contract and on each invoice.
Haven't really used it yet because we don't have a problem with late payments, but I do think it would work, because our B2B customers are usually very appreciative of saving small percentages when we offer it, and unlikely to just give up that money by being late.