3カラム目で折り返したい場合(4カラム目から次の行)の例です。
マークアップはこんな感じ。

<div class="flex-items">
	<div class="flex-items__item">1</div>
	<div class="flex-items__item">2</div>
	<div class="flex-items__item">3</div>
	<div class="flex-items__item">4</div>
	<div class="flex-items__item">5</div>
	<div class="flex-items__item">6</div>
	<div class="flex-items__item">7</div>
	<div class="flex-items__item">8</div>
	<div class="flex-items__item">9</div>
</div>
.flex-items {
    display: flex;
    flex-wrap: wrap;
}
.flex-items::after {
    content: '';
    width: 100%;
}
.flex-items__item:nth-child(n+4) {
    order: 1;
}

仕組みは order です。
order の初期値は 0 のため、1~3カラムは order: 0
4カラム目以降が order: 1
となります。

さらに、::after 疑似要素で追加されたコンテンツが .flex-items の最後に追加されるので、
.flex-items__item:nth-child(1) order: 0
.flex-items__item:nth-child(2) order: 0
.flex-items__item:nth-child(3) order: 0
.flex-items__item:nth-child(4) order: 1
   ・
   ・
   ・
.flex-items__item:nth-child(9) order: 1
.flex-items::after order: 0
となります。
これを order に従って順番を入れ替えると、疑似要素は width: 100% なので1カラムから3カラムは横並び、4カラムから次の行となるわけです。

もうひとつ ::before 疑似要素が残っているので、もう1カ所指定することも可能です。
::before 疑似要素は .flex-items の先頭に追加されるので、折り返したいカラムに order: 2 を指定します。

.flex-items::before {
    content: '';
    order: 2;
    width: 100%;
}
.flex-items__item:nth-child(n+6) {
    order: 2;
}