need help with p.o.v section of slapped together tix clock

2n2222a could be ok.

The first thing to decide is what multiplexing scheme to use.

You can go for row-by-row which would give a 1 in 3 ratio, meaning all 9 LEDs in a row could be on at the same time and each row would be on for 1/3 of the time. This would require 9 series resistors and 3 transistors for the cathodes. (3 more resistors would be needed for the transistor bases.) This would give the best brightness.

You can go for column-by-column which would give a 1 to 9 multiplex ratio. 3 LEDs in the same column would be on at the same time and each column would be on for 1/9 of the time. Only 3 series resistors would be needed, and 9 transistors for the anodes. This would be one third of the brightness of the first suggestion, but would look brighter than that to the human eye because it is not linear. You could use the 2n2222 in emitter-follower configuration, so no base resistors needed. To get consistent brightness for the different led colours, you would need to use 9 series resistors instead of 3.

Currently, when your code performs its flash() function, it is not overloading the pins because only 1 led is ever lit at once, so the multiplexing is led-by-led. This results in a 1 in 27 ratio, which I would expect to be quite poor brightness. How do you find it? Try modifying your sketch to perform flash() over and over and view the display in different levels of ambient light.