#include<bits/stdc++.h>
using namespace std;
int n;
int ma[11][11];
int dp[11][11][11][11];
int u,v,w;
int dx[5]={0,1,0};
int dy[5]={0,0,1};
int dfs(int x,int y,int p,int q){
if(x+y==2*n){
return ma[n][n];
}
int m=0;
if(dp[x][y][p][q]!=-1) return dp[x][y][p][q];
if(x==p&&y==q){
if(x==n){
if(p==n) m=max(m,dfs(x,y+1,p,q+1)+ma[x][y]);
if(q==n) m=max(m,dfs(x,y+1,p+1,q)+ma[x][y]);
}
else if(y==n){
if(p==n) m=max(m,dfs(x+1,y,p,q+1)+ma[x][y]);
if(q==n) m=max(m,dfs(x+1,y,p+1,q)+ma[x][y]);
}
else{
m=max(m,dfs(x,y+1,p,q+1)+ma[x][y]);
m=max(m,dfs(x,y+1,p+1,q)+ma[x][y]);
m=max(m,dfs(x+1,y,p,q+1)+ma[x][y]);
m=max(m,dfs(x+1,y,p+1,q)+ma[x][y]);
}
}
else{
if(x==n){
if(p==n) m=max(m,dfs(x,y+1,p,q+1)+ma[x][y]+ma[p][q]);
if(q==n) m=max(m,dfs(x,y+1,p+1,q)+ma[x][y]+ma[p][q]);
}
else if(y==n){
if(p==n) m=max(m,dfs(x+1,y,p,q+1)+ma[x][y]+ma[p][q]);
if(q==n) m=max(m,dfs(x+1,y,p+1,q)+ma[x][y]+ma[p][q]);
}
else{
m=max(m,dfs(x,y+1,p,q+1)+ma[x][y]+ma[p][q]);
m=max(m,dfs(x,y+1,p+1,q)+ma[x][y]+ma[p][q]);
m=max(m,dfs(x+1,y,p,q+1)+ma[x][y]+ma[p][q]);
m=max(m,dfs(x+1,y,p+1,q)+ma[x][y]+ma[p][q]);
}
}
return dp[x][y][p][q]=m;
}
int main()
{
cin>>n;
memset(dp,-1,sizeof dp);
while(1){
cin>>u>>v>>w;
if(u==0&&v==0&&w==0) break;
ma[u][v]=w;
}
cout<<dfs(1,1,1,1);
return 0;
}
ma为方阵,xypq分别是第一次和第二次的坐标