#include using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll N; cin >> N; vector X(N), Y(N), Z(N); for(ll i = 0; i < N; i++) { cin >> X[i] >> Y[i] >> Z[i]; } vector> dp(1 << N, vector(3 * N, -1e18)); for(ll i = 0; i < N; i++) { dp[1 << i][3 * i] = X[i]; dp[1 << i][3 * i + 1] = Y[i]; dp[1 << i][3 * i + 2] = Z[i]; } for(ll i = 1; i < 1 << N; i++) { for(ll j = 0; j < 3 * N; j++) { if(~i >> (j / 3) & 1) { continue; } ll p, q; if(j % 3 == 0) { tie(p, q) = minmax(Y[j / 3], Z[j / 3]); } if(j % 3 == 1) { tie(p, q) = minmax(X[j / 3], Z[j / 3]); } if(j % 3 == 2) { tie(p, q) = minmax(X[j / 3], Y[j / 3]); } for(ll k = 0; k < 3 * N; k++) { if(i >> (k / 3) & 1) { continue; } ll np, nq, h; if(k % 3 == 0) { tie(np, nq) = minmax(Y[k / 3], Z[k / 3]); h = X[k / 3]; } if(k % 3 == 1) { tie(np, nq) = minmax(X[k / 3], Z[k / 3]); h = Y[k / 3]; } if(k % 3 == 2) { tie(np, nq) = minmax(X[k / 3], Y[k / 3]); h = Z[k / 3]; } if(np <= p && nq <= q) { dp[i | (1 << (k / 3))][k] = max(dp[i | (1 << (k / 3))][k], dp[i][j] + h); } } } } ll ans = 0; for(ll i = 0; i < 1 << N; i++) { for(ll j = 0; j < 3 * N; j++) { ans = max(ans, dp[i][j]); } } cout << ans << "\n"; }