#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e4 + 5;
const int inf = 0x3f3f3f3f;
int n, head[maxn], dis[maxn], cnt;
struct node{
int to, w, next;
} ed[maxn*4]; //数组开2*maxn超时,开大一点
inline void add( int u, int v, int w ){
ed[cnt].to = v;
ed[cnt].w = w;
ed[cnt].next = head[u];
head[u] = cnt++;
}
inline int max( int a, int b ){
return a>b ? a:b;
}
inline int min( int a, int b ){
return a<b ? a:b;
}
inline void spfa( int beg ){
bool vis[maxn];
memset( vis, 0, sizeof(vis) );
memset( dis, -inf, sizeof(dis) );
queue<int> q;
q.push(beg);
dis[beg] = 0;
vis[beg] = 1;
while( !q.empty() ){
int u = q.front();
q.pop();
vis[u] = 0;
for( int i=head[u]; i!=-1; i=ed[i].next ){
int v = ed[i].to;
if( dis[v] < dis[u]+ed[i].w ){
dis[v] = dis[u]+ed[i].w;
if( !vis[v] ){
vis[v] = 1;
q.push(v);
}
}
}
}
}
int main(){
while( ~scanf("%d", &n) ){
cnt = 0;
int a = inf, b = -1;
memset( head, -1, sizeof(head) );
for( int i=0; i<n; i++ ){
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
add( u, v+1, w );
a = min( a, u );
b = max( b, v+1 );
}
for( int i=a; i<=b; i++ ){
add( i-1, i, 0 );
add( i, i-1, -1 );
}
spfa(a);
printf("%d\n", dis[b]);
}
return 0;
}