#include <iostream>
(30316)#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 3010;
struct Node {
int l;
int w;
int h;
};
struct Node e[maxn];
int n;
int res = 0;
int main() {
cin >> n;
int dp[maxn];
for (int i = 0; i < n; i++) {
cin >> e[i].l >> e[i].w >> e[i].h;
}
sort(e, e + n, [](Node x, Node y)
{
if (x.l == y.l) {
return x.w > y.w;
} else {
return x.l > y.l;
}
});
for (int i = 0; i < n; i++) dp[i] = e[i].h;
//dp[i] [0,i]的最大高度
// cout << e[0].l;
// dfs(0, maxn, maxn, 0, allH);
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
if (/*i != j && */e[i].l < e[j].l && e[i].w < e[j].w) {
dp[i] = max(dp[i], dp[j] + e[i].h);
}
res = max(res, dp[i]);
}
}
cout << res;
return 0;
}
// 64 位输出请用 printf("%lld")