Led matrix brightness problem

Your current code lights one led at any instant. This means that if you want all 16 LEDs to appear lit at once, each led is lit for 6.25% of the time at most. Probably less than that in practice because of code overheads.

It is possible to light up to 4 LEDs at any instant. These can be 4 in the same row or 4 in the same column, depending how you wire the matrix to the driver chips. That way, to make all 16 LEDs appear to be out at once, each led can be lit up to 25% of the time. This will require significant changes to your code.

Yes, you could use the udn chip instead of the uln chip, but there would be no advantage. You could use both udn and uln together to achieve more brightness, but I do not think that will be needed, once your code is changed to achieve 1 in 4 duty cycle.