#include <algorithm>
#include <cstdio>
#include <vector>
#include <iostream>
#include <queue>
using namespace std;
#define MAXN 50001
const int INF = 2e9;
//英语 看博友分析 抄博友程序 算导24.4 差分约束与最短路径 百度 差分约束 求最长路 spfa 背
//博友图的数据结构更快
//抄的多
//抄博友分析
//令sum(n)表示区间[1,n]中选了几个点
//那么,显然有以下不等式 :
//1. sum(n)- sum(n - 1) >= 0
//2. sum(n) - sum(n - 1) <= 1
//3. sum(bi) - sum(ai-1) >= ci
struct nod
{
int y;
int zhi;
};
vector<nod> G[MAXN+5];
int n;
int theMin;
int theMax;
int dis[MAXN+5];
int inq[MAXN+5];
void add(int u,int v,int w)
{
G[u].push_back((nod){v,w});
}
int spfa()
{
for(int i = theMin; i <= theMax; i++){
//inq[i] = 0;
dis[i] = -INF;
}
dis[theMin] = 0;
int i,cur,v;
queue< int > q;
q.push(theMin);
inq[theMin] = 1;
while (!q.empty())
{
cur = q.front();
q.pop();
inq[cur] = 0;//不加wa 不加是bfs 加是spaf 背
for (i = 0; i<G[cur].size(); i++ )
{
v = G[cur][i].y;
if ( dis[cur] + G[cur][i].zhi > dis[v])
{
dis[v] = dis[cur] + G[cur][i].zhi;
if (!inq[v])
{
inq[v] = 1;
q.push(v);
}
}
}
}
return dis[theMax];
}
int main()
{
scanf("%d",&n);
theMin = INF;
theMax = -INF;
for(int i = 0; i < n; i++){
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
add(u,v+1,w);//百度 如果想连边后求最长路 那么将不等式变形为这种形式 d[x]>=d[y]+z y---x连一条权值为z的边
theMin = min(theMin,u);
theMax = max(theMax,v+1);
}
for(int i = theMin; i < theMax; i++){
add(i,i+1,0);
add(i+1,i,-1);
}
printf("%d\n",spfa());
return 0;
}