You could use a SplitContainer control. It gives you two panels in which to place other controls, including more SplitContainers.
So if you drop one on your form, then drop a second one inside one of the panels on the first, you'll have three "columns" where you can place each of your GroupBoxes.
Then you could set IsSplitterFixed = true
on the splitters initially, to disable resizing the panels, then re-enable them if the user maximizes the window:
private void Form1_SizeChanged(object sender, EventArgs e)
{
splitContainer1.IsSplitterFixed = WindowState != FormWindowState.Maximized;
splitContainer2.IsSplitterFixed = WindowState != FormWindowState.Maximized;
}