#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

const int INF = int(2e9);

struct node
{
	int x, y, z;
	node(){}
	node(int x, int y, int z) : x(x), y(y), z(z){}	
	bool operator < (const node &rhs) const {
		return (y - x + 1) < (rhs.y - rhs.x + 1);
	}
};

vector<int> E[10010];
int f[10010];
int g[10010];

int main()
{
	int n;
	while (scanf("%d", &n) != EOF) {
		vector<node> Q;
		vector<int> U;
		for (int i = 0; i < n; i++) {
			int x, y, z;
			scanf("%d%d%d", &x, &y, &z);
			y = x + y - 1;
			Q.push_back(node(x, y, z));
			U.push_back(x), U.push_back(y);
		}
		Q.push_back(node(0, INF, 0));
		U.push_back(-INF), U.push_back(INF);
		sort(U.begin(), U.end());
		U.resize(unique(U.begin(), U.end()) - U.begin());
		for (int i = 0; i <= U.size(); i++) E[i].clear();
		sort(Q.begin(), Q.end());
		for (int i = 0; i < Q.size(); i++) {
			int L = lower_bound(U.begin(), U.end(), Q[i].x) - U.begin() + 1;
			int R = lower_bound(U.begin(), U.end(), Q[i].y) - U.begin() + 1;
			Q[i].x = L, Q[i].y = R;
			E[R].push_back(i);
		}
		for (int i = 0; i < Q.size(); i++) {
			int L = Q[i].x, R = Q[i].y;
			f[L - 1] = 0;
			for (int j = L; j <= R; j++) {
				f[j] = f[j - 1];
				for (int k = 0; k < E[j].size(); k++) {
					int idx = E[j][k];
					if (idx < i && Q[idx].x >= L) {
						f[j] = max(f[j], f[Q[idx].x - 1] + g[idx]);
					}
				}
			}
			g[i] = f[R] + Q[i].z; 
		}
		printf("%d\n", g[n]);
	}
	return 0;
}

