#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 10;
int grid[MAXN][MAXN];
int dp[MAXN][MAXN][MAXN][MAXN];
int max4(int a, int b, int c, int d) {
return max(max(a, b), max(c, d));
}
int main() {
int N;
cin >> N;
memset(grid, 0, sizeof(grid));
while (true) {
int x, y, value;
cin >> x >> y >> value;
if (x == 0 && y == 0 && value == 0) break;
grid[x-1][y-1] = value;
}
memset(dp, -1, sizeof(dp));
dp[0][0][0][0] = grid[0][0];
for (int x1 = 0; x1 < N; ++x1) {
for (int y1 = 0; y1 < N; ++y1) {
for (int x2 = 0; x2 < N; ++x2) {
for (int y2 = 0; y2 < N; ++y2) {
if (dp[x1][y1][x2][y2] == -1) continue;
int value = grid[x1][y1];
if (x1 != x2 || y1 != y2) value += grid[x2][y2];
if (x1 + 1 < N && x2 + 1 < N)
dp[x1 + 1][y1][x2 + 1][y2] = max(dp[x1 + 1][y1][x2 + 1][y2], dp[x1][y1][x2][y2] + value);
if (x1 + 1 < N && y2 + 1 < N)
dp[x1 + 1][y1][x2][y2 + 1] = max(dp[x1 + 1][y1][x2][y2 + 1], dp[x1][y1][x2][y2] + value);
if (y1 + 1 < N && x2 + 1 < N)
dp[x1][y1 + 1][x2 + 1][y2] = max(dp[x1][y1 + 1][x2 + 1][y2], dp[x1][y1][x2][y2] + value);
if (y1 + 1 < N && y2 + 1 < N)
dp[x1][y1 + 1][x2][y2 + 1] = max(dp[x1][y1 + 1][x2][y2 + 1], dp[x1][y1][x2][y2] + value);
}
}
}
}
cout << dp[N-1][N-1][N-1][N-1] << endl;
return 0;
}