#include <bits/stdc++.h>
using namespace std;
struct disc {
  int a, b, h;
};
bool cmp(disc &x, disc &y) {
  if (x.b > y.b) {
    return 1;
  } else if (x.b < y.b) {
    return 0;
  } else {
    return x.a > y.a;
  }
}
const int N = 1e5;
int n;
long long t[2 * N] = {};
void modify(int p, long long value) {
  for (t[p += n] = value; p > 1; p >>= 1) t[p >> 1] = max(t[p], t[p ^ 1]);
}
long long query(int l, int r) {
  long long res = 0;
  for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
    if (l & 1) res = max(res, t[l++]);
    if (r & 1) res = max(res, t[--r]);
  }
  return res;
}
int main() {
  cin >> n;
  vector<disc> d(n);
  vector<long long> dp(n, 0);
  vector<int> bn(n + 1);
  for (int i = 0; i < n; i++) {
    cin >> d[i].a >> d[i].b >> d[i].h;
  }
  sort(d.begin(), d.end(), cmp);
  for (int i = 0; i < n; i++) {
    bn[i] = d[i].b;
  }
  bn[n] = 0;
  dp[n - 1] = d[n - 1].h;
  modify(n - 1, dp[n - 1]);
  long long ans = dp[n - 1];
  for (int i = n - 2; i >= 0; i--) {
    int ind = upper_bound(bn.begin(), bn.end(), d[i].a + 1, greater<int>()) -
              bn.begin();
    dp[i] = d[i].h;
    if (ind > i) {
      dp[i] = dp[i] + query(i, ind);
    }
    modify(i, dp[i]);
    ans = max(ans, dp[i]);
  }
  cout << ans << endl;
  return 0;
}
