#include <bits/stdc++.h>
const int N = 100001;
using namespace std;
long long int b[20 * N];
void upd(int ql, int qr, int ind, int l, int r, long long int val) {
  if (ql > r || l > qr) return;
  if (ql <= l && r <= qr) {
    b[ind] = max(b[ind], val);
    return;
  }
  int mid = (l + r) / 2;
  upd(ql, qr, 2 * ind + 1, l, mid, val);
  upd(ql, qr, 2 * ind + 2, mid + 1, r, val);
  b[ind] = max(b[2 * ind + 1], b[2 * ind + 2]);
}
long long int query(int ql, int qr, int ind, int l, int r) {
  if (ql > r || l > qr) return 0;
  if (ql <= l && r <= qr) {
    return b[ind];
  }
  int mid = (l + r) / 2;
  return max(query(ql, qr, 2 * ind + 1, l, mid),
             query(ql, qr, 2 * ind + 2, mid + 1, r));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int n;
  cin >> n;
  set<int> st;
  vector<int> a[n];
  memset(b, 0, sizeof b);
  for (int i = 0; i < n; i++) {
    a[i].resize(3);
    cin >> a[i][1] >> a[i][0] >> a[i][2];
    st.insert(a[i][0]);
    st.insert(a[i][1]);
  }
  map<int, int> d;
  int k = 0;
  for (int e : st) {
    d[e] = ++k;
  }
  sort(a, a + n);
  long long int ans = 0;
  for (auto &e : a) {
    e[0] = d[e[0]];
    e[1] = d[e[1]];
    long long int h = query(e[1] + 1, st.size(), 0, 1, st.size()) + e[2];
    upd(e[0], e[0], 0, 1, st.size(), h);
    ans = max(ans, h);
  }
  cout << ans;
}
