#include
<
iostream
>
#include
<
cstdio
>
#include
<
cstdlib
>
#include
<
cstring
>
using
namespace
std;
#define
maxn 50005
#define
INF 0x3f3f3f3f
int
pnt[maxn
*
3
], cost[maxn
*
3
], nxt[maxn
*
3
];
int
e, head[maxn];
int
dist[maxn];
bool
vis[maxn];
int
n, mmin, mmax;
int
relax(
int
u,
int
v,
int
c)
{
if
(dist[v]
<
dist[u]
+
c)
{
dist[v]
=
dist[u]
+
c;
return
1
;
}
return
0
;
}
inline
void
addedge(
int
u,
int
v,
int
c)
{
pnt[e]
=
v;
cost[e]
=
c;
nxt[e]
=
head[u];
head[u]
=
e
++
;
}
int
SPFA(
int
src,
int
n)
{
int
i;
for
(i
=
src; i
<=
n; i
++
)
{
vis[i]
=
0
;
dist[i]
=
-
INF;
}
dist[src]
=
0
;
int
Q[maxn
*
3
], top
=
1
;
Q[
0
]
=
src;
vis[src]
=
true
;
while
(top)
{
int
u, v;
u
=
Q[
--
top];
vis[u]
=
false
;
for
(i
=
head[u]; i
!=
-
1
; i
=
nxt[i])
{
v
=
pnt[i];
if
(
1
==
relax(u, v, cost[i])
&&
!
vis[v])
{
Q[top
++
]
=
v;
vis[v]
=
true
;
}
}
}
return
dist[n];
}
void
input()
{
mmax
=
0
;
mmin
=
INF;
for
(
int
i
=
0
; i
<
n; i
++
)
{
int
a, b, c;
scanf(
"
%d%d%d
"
,
&
a,
&
b,
&
c);
a
++
;
b
++
;
if
(mmax
<
b)
mmax
=
b;
if
(mmin
>
a)
mmin
=
a;
addedge(a
-
1
, b, c);
}
for
(
int
i
=
mmin; i
<=
mmax; i
++
)
{
addedge(i, i
-
1
,
-
1
);
addedge(i
-
1
, i,
0
);
}
}
int
main()
{
//
freopen("t.txt", "r", stdin);
scanf(
"
%d
"
,
&
n);
e
=
0
;
memset(head,
-
1
,
sizeof
(head));
input();
printf(
"
%d\n
"
, SPFA(mmin
-
1
, mmax));
return
0
;
}