#include <bits/stdc++.h>
using namespace std;
int n;
long long dp[100100];
long long tree[4 * 100100];
pair<long long, pair<long long, long long>> v[100100];
void update(long long root, long long l, long long r, long long pos,
            long long value) {
  if (l == r) {
    tree[root] = value;
  } else {
    long long mid = (l + r) / 2;
    if (pos > mid) {
      update(((root << 1) + 2), mid + 1, r, pos, value);
    } else {
      update(((root << 1) + 1), l, mid, pos, value);
    }
    tree[root] = max(tree[((root << 1) + 1)], tree[((root << 1) + 2)]);
  }
}
long long get(long long root, long long l, long long r, long long a,
              long long b) {
  if (a > r || b < l) return 0;
  if (l == a && r == b) {
    return tree[root];
  }
  long long mid = (l + r) / 2;
  return max(get(((root << 1) + 1), l, mid, a, min(b, mid)),
             get(((root << 1) + 2), mid + 1, r, max(a, mid + 1), b));
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> v[i].second.first >> v[i].first >> v[i].second.second;
  }
  sort(v, v + n);
  long long ans = v[0].second.second;
  update(0, 0, n - 1, 0, v[0].second.second);
  for (int i = 1; i < n; i++) {
    int b = 0, e = i, mid;
    while (b < e) {
      mid = (b + e) / 2;
      if (v[mid].first > v[i].second.first) {
        e = mid;
      } else {
        b = mid + 1;
      }
    }
    long long partial = (b == i) ? 0 : get(0, 0, n - 1, b, i - 1);
    ans = max(ans, partial + v[i].second.second);
    update(0, 0, n - 1, i, partial + v[i].second.second);
  }
  cout << ans << endl;
  return 0;
}
