#include <bits/stdc++.h>
#define ll long long
#define N int(1e6)
using namespace std;
ll n;
ll l[N+10],r[N+10],w[N+10];
ll max1=LLONG_MIN;
ll lazy[4*N],seg[4*N];
void down(ll id)
{
    ll sum=lazy[id];
    if(sum==0) return;
    seg[id*2]+=sum;
    lazy[id*2]+=sum;
    lazy[id*2+1]+=sum;
    seg[id*2+1]+=sum;
    lazy[id]=0;
}
void upd(ll id,ll l,ll r,ll u,ll v,ll val)
{
    if(u>r || v<l) return ;
    if(u<=l && r<=v)
    {
        seg[id]+=val;
        lazy[id]+=val;
        return ;
    }
    down(id);
    ll mid=(l+r)/2;
    upd(id*2,l,mid,u,v,val);
    upd(id*2+1,mid+1,r,u,v,val);
    seg[id]=max(seg[id*2],seg[id*2+1]);
}
struct dl
{
    ll l,w;
};
vector<dl>adj[N+10];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    if(fopen("SSEQ.INP","r"))
    {
        freopen("SSEQ.INP","r",stdin);
        freopen("SSEQ.OUT","w",stdout);
    }
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>l[i]>>r[i]>>w[i];
        max1=max(max1,r[i]);
        adj[r[i]].push_back({l[i],w[i]});
    }
    ll ans=LLONG_MIN;
    for(int r=1;r<=max1;r++)
    {
        for(auto x:adj[r])
        {
            upd(1,1,max1,1,x.l,x.w);
        }
        ans=max(ans,seg[1]);
    }
    cout<<ans;

    return 0;
}
