using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Globalization; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var n = NN; var map = NArr(n); var bitmax = 1 << n; var dp = new int[bitmax, n, 3]; var ans = 0; for (var b = 0; b < bitmax; ++b) { if (b == 0) { for (var i = 0; i < n; ++i) { dp[1 << i, i, 0] = map[i][0]; dp[1 << i, i, 1] = map[i][1]; dp[1 << i, i, 2] = map[i][2]; } } else { for (var i = 0; i < n; ++i) { if ((b & (1 << i)) == 0) continue; for (var j = 0; j < n; ++j) { if ((b & (1 << j)) != 0) continue; var next = b | (1 << j); if (Math.Min(map[i][1], map[i][2]) >= Math.Min(map[j][1], map[j][2]) && Math.Max(map[i][1], map[i][2]) >= Math.Max(map[j][1], map[j][2])) dp[next, j, 0] = Math.Max(dp[next, j, 0], dp[b, i, 0] + map[j][0]); if (Math.Min(map[i][1], map[i][2]) >= Math.Min(map[j][0], map[j][2]) && Math.Max(map[i][1], map[i][2]) >= Math.Max(map[j][0], map[j][2])) dp[next, j, 1] = Math.Max(dp[next, j, 1], dp[b, i, 0] + map[j][1]); if (Math.Min(map[i][1], map[i][2]) >= Math.Min(map[j][0], map[j][1]) && Math.Max(map[i][1], map[i][2]) >= Math.Max(map[j][0], map[j][1])) dp[next, j, 2] = Math.Max(dp[next, j, 2], dp[b, i, 0] + map[j][2]); if (Math.Min(map[i][0], map[i][2]) >= Math.Min(map[j][1], map[j][2]) && Math.Max(map[i][0], map[i][2]) >= Math.Max(map[j][1], map[j][2])) dp[next, j, 0] = Math.Max(dp[next, j, 0], dp[b, i, 1] + map[j][0]); if (Math.Min(map[i][0], map[i][2]) >= Math.Min(map[j][0], map[j][2]) && Math.Max(map[i][0], map[i][2]) >= Math.Max(map[j][0], map[j][2])) dp[next, j, 1] = Math.Max(dp[next, j, 1], dp[b, i, 1] + map[j][1]); if (Math.Min(map[i][0], map[i][2]) >= Math.Min(map[j][0], map[j][1]) && Math.Max(map[i][0], map[i][2]) >= Math.Max(map[j][0], map[j][1])) dp[next, j, 2] = Math.Max(dp[next, j, 2], dp[b, i, 1] + map[j][2]); if (Math.Min(map[i][0], map[i][1]) >= Math.Min(map[j][1], map[j][2]) && Math.Max(map[i][0], map[i][1]) >= Math.Max(map[j][1], map[j][2])) dp[next, j, 0] = Math.Max(dp[next, j, 0], dp[b, i, 2] + map[j][0]); if (Math.Min(map[i][0], map[i][1]) >= Math.Min(map[j][0], map[j][2]) && Math.Max(map[i][0], map[i][1]) >= Math.Max(map[j][0], map[j][2])) dp[next, j, 1] = Math.Max(dp[next, j, 1], dp[b, i, 2] + map[j][1]); if (Math.Min(map[i][0], map[i][1]) >= Math.Min(map[j][0], map[j][1]) && Math.Max(map[i][0], map[i][1]) >= Math.Max(map[j][0], map[j][1])) dp[next, j, 2] = Math.Max(dp[next, j, 2], dp[b, i, 2] + map[j][2]); } } } for (var i = 0; i < n; ++i) { ans = Math.Max(ans, Math.Max(dp[b, i, 0], Math.Max(dp[b, i, 1], dp[b, i, 2]))); } } WriteLine(ans); } }