Your HTML creates rows using DIVs which prevents you from ever doing what you want to do. There will be no CSS option for you without a rewrite of your templates that output the HTML. I don't know if there is a CSS-only option that would be able to do what you wanted to do. Paul O'B here at Sitepoint might know.
As for creating a loop using PHP to do what you want to do, yes that would be possible. A way would be to unwind the posts array Wordpress creates using a loop and put the posts into three separate arrays for each column.
You could have a counter inside the loop keeping track of which column you are on (1, 2, or 3), incrementing on each iteration. An if condition tests which iteration the counter is on and if it reaches 3, the counter is reset to one.
When the loop is on 1, an array such as $col1 is set equal to the post. Using the brackets without an index will automatically index the array so you don't need to. $col2 is set equal to the post when the counter is on 2, $col3 is set equal to the post when the counter is on 3, and when the counter reaches 3 the loop is reset at the bottom to 1. The counter isn't the control for the loop.
I've never tried anything like this, but I know it can be done. There is always a way. I'm not familiar enough with how to interface with Wordpress' posts to do this. But it can be done.