We may try this to keep it square (somewhat tricky but it works) 
width: calc(100% / 3 * 2);
height: 0;
padding-bottom: calc(100% / 3 * 2 - 0.2rem);

Because the border-box specified above, we need to subtract by 0.2rem for border width.
Need confirmation from Dominic though.