#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
#define rep2(i,a,b) for(ll i=(a);i<(b);i++)
#define all(a)  (a).begin(),(a).end()
#define pb emplace_back
#define INF (1e9+1)
//#define INF (1LL<<59)

//verified POJ3680
#define MAX_V (365+3)
struct edge { int to, cap, cost,rev; };

vector<edge> G[MAX_V];

// from??????to??????????????????cap????????????cost????????????????????????????????????
void add_edge(int from, int to, int cap, int cost) {
    G[from].push_back((edge){to, cap, cost, (int)G[to].size()});
    G[to].push_back((edge){from, 0, -cost, (int)G[from].size() - 1});
}

//?????????????????????????????????????????´????????????
void shortest_path(int s,vector<int> &d){
    int v = d.size();
    rep(i,d.size())d[i]=INF;
    d[s]=0;
    rep(loop,v){
        rep(i,v){
            for(auto e:G[i]){
                if(e.cap && d[i]!=INF && d[e.to] > d[i]+e.cost)
                    d[e.to] = d[i]+e.cost;
            }
        }
    }
}


// s??????t????????????f???????°??????¨???????±???????
// ??????????????´??????-1?????????
int min_cost_flow(int s, int t, int f) {
    vector<int> h(MAX_V);	//??????????????£???
    vector<int> dist(MAX_V);// ???????????¢
    int prevv[MAX_V], preve[MAX_V];// ??´??????????????¨???

    int res = 0;
    shortest_path(s, h);
    
    while (f > 0) {
        // ?????????????????????????????¨??????h?????´??°??????
        priority_queue<pii, vector<pii>, greater<pii> > que;
        rep(i,dist.size())dist[i]=INF;
        dist[s] = 0;
        que.push(pii(0, s));
        while (!que.empty()) {
            pii p = que.top(); que.pop();
            int v = p.second;
            if (dist[v] < p.first) continue;
            for (int i = 0; i < G[v].size(); i++) {
                edge &e = G[v][i];
                if (e.cap > 0 && dist[e.to] > dist[v] + e.cost + h[v] - h[e.to]) {
                    dist[e.to] = dist[v] + e.cost + h[v] - h[e.to]; prevv[e.to] = v;
                    preve[e.to] = i;
                    que.push(pii(dist[e.to], e.to));
                }
            }
        }
        if (dist[t] == INF) return -INF;	//????????\???????????????
        
        for (int v = 0; v < h.size(); v++) h[v] += dist[v];
        
        
        // s-t????????????????????£??????????????????
        int d = f;
        for (int v = t; v != s; v = prevv[v]) {
            d = min(d, G[prevv[v]][preve[v]].cap);
        }
        f -= d;
        res += d * h[t];
        for (int v = t; v != s; v = prevv[v]) {
            edge &e = G[prevv[v]][preve[v]]; e.cap -= d;
            G[v][e.rev].cap += d;
        }
    }
    return res;
}

int main(){
    int n;
    while(cin>>n&&n){
        rep(i,MAX_V)G[i].clear();
        
        map<pii,vector<int>> mp;
        rep(i,n){
            int s,t,c;
            cin>>s>>t>>c;
            s--,t;
            mp[pii(s,t)].pb(c);
        }
        for(auto e:mp){
            sort(all(e.second),greater<int>());
            rep(i,min(2,(int)e.second.size()))add_edge(e.first.first, e.first.second, 1, -e.second[i]);
        }
        int S = 366;
        int T = S+1;
        
        int bef = -1;
        rep(i,365)add_edge(i,i+1,INF,0);
        add_edge(S, 0, INF, 0);
        add_edge(365, T, INF, 0);
        
        cout<<-1*min_cost_flow(S, T, 2)<<endl;
    }
}

Measured memory_bytes: 3288