#include <bits/stdc++.h>
using namespace std;
vector<int> H;
struct data {
  int a, b, h;
};
data D[100001];
bool cmp(data l, data r) {
  if (l.b != r.b)
    return l.b > r.b;
  else if (l.a != r.a)
    return l.a > r.a;
  return l.h > r.h;
}
int cali(int val) {
  return lower_bound(H.begin(), H.end(), val) - H.begin() + 1;
}
long long FT[200000 + 1];
long long query(int i) {
  long long res = 0;
  for (; i > 0; i -= (i & -i)) res = max(res, FT[i]);
  return res;
}
void update(int i, long long val) {
  for (; i <= 200000; i += (i & -i)) FT[i] = max(val, FT[i]);
}
int main() {
  int N;
  scanf("%d", &N);
  for (int i = 0; i < N; i++) {
    scanf("%d%d%d", &D[i].a, &D[i].b, &D[i].h);
    H.push_back(D[i].a);
    H.push_back(D[i].b);
  }
  sort(D, D + N, cmp);
  sort(H.begin(), H.end());
  H.erase(unique(H.begin(), H.end()), H.end());
  long long ans = 0;
  for (int i = 0; i < N; i++) {
    D[i].a = cali(D[i].a);
    D[i].b = cali(D[i].b);
    long long tmp = query(D[i].b - 1);
    tmp += D[i].h;
    ans = max(ans, tmp);
    update(D[i].a, tmp);
  }
  printf("%lld\n", ans);
}
