#include<bits/stdc++.h>
using namespace std;
struct Node{
int x,y,h;
}a[10005];
int mem[1005][1005];
int n;
int dfs(int x,int y){
if(mem[x][y]!=-1){
return mem[x][y];
}
mem[x][y]=0;
for(int i=1;i<=n*3;i++){
if(a[i].x<x&&a[i].y<y){
mem[x][y]=max(mem[x][y],a[i].h+dfs(a[i].x,a[i].y));
}
}
return mem[x][y];
}
int main(){
scanf("%d",&n);
int mx=INT_MIN;
for(int i=1;i<=105;i++){
for(int j=1;j<=105;j++){
mem[i][j]=-1;
}
}
for(int i=1;i<=n;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
mx=max(mx,max(x,max(y,z)));
a[(i-1)*3+1].x=x;
a[(i-1)*3+1].y=y;
a[(i-1)*3+1].h=z;
a[(i-1)*3+2].x=x;
a[(i-1)*3+2].y=z;
a[(i-1)*3+2].h=y;
a[(i-1)*3+3].x=y;
a[(i-1)*3+3].y=z;
a[(i-1)*3+3].h=x;
}
cout<<dfs(mx+1,mx+1);
return 0;
}