1. Нужно изменить либо формулы, либо бокс-модель. Второе проще
box-sizing: border-box;
2. У вас три колонки, а значит два промежутка по 30px:
width: calc((100% - 30px * 2) / 3);
3. В жопу марджины. Для указания промежутков есть специальное свойство
gap: 20px 30px;
Итог:
.grid {
display: flex;
flex-wrap: wrap;
gap: 20px 30px;
}
.item {
box-sizing: border-box;
width: calc((100% - 30px * 2) / 3);
text-decoration: none;
color: #000;
padding: 20px;
border: 1px solid #000;
}