def Binary_Search_Count(A,x,sort=True,equal=False):
    """2分探索によって,x未満の要素の個数を調べる.

    A:リスト
    x:調べる要素
    sort:ソートをする必要があるかどうか(Trueで必要)
    equal:Trueのときはx"未満"がx"以下"になる
    """
    if sort:
        A.sort()
        
    N=len(A)
    if A[-1]<=x:
        return N
    elif x<A[0] or (not equal and x==A[0]):
        return 0

    L,R=0,N
    while R-L>1:
        C=L+(R-L)//2
        if x<A[C] or (not equal and x==A[C]):
            R=C
        else:
            L=C
    return R

def Binary_Search_Low_Value(A,x,sort=True,equal=False):
    """Aのx未満の要素の中で最大のものを出力する.

    A:リスト
    x:調べる要素
    sort:ソートをする必要があるかどうか(Trueで必要)
    equal:Trueのときはx"未満"がx"以下"になる
    ※全ての要素がx以上(超える)場合はNoneが返される.
    """
    
    if sort:
        A.sort()

    K=Binary_Search_Count(A,x,sort=False,equal=equal)
    if K==0:
        return None
    else:
        return A[K-1]

def Binary_Search_High_Value(A,x,sort=True,equal=False):
    """Aのxを超える要素の中で最大のものを出力する.

    A:リスト
    x:調べる要素
    sort:ソートをする必要があるかどうか(Trueで必要)
    equal:Trueのときはx"を超える"がx"以上"になる
    ※全ての要素がx以下(未満)場合はNoneが返される.
    """
    
    if sort:
        A.sort()

    K=Binary_Search_Count(A,x,sort=False,equal=not equal)
    if K==len(A):
        return None
    else:
        return A[K]
#----------------------------------------------------
from copy import copy
import sys
N=int(input())
A=list(map(int,input().split()))

B=copy(A)
B.sort()
if B==A or B[::-1]==A:
    print(-1)
    sys.exit()

#Type A
M=10**40
Lmin=[0]*N
for i in range(N):
    M=Lmin[i]=min(M,A[i])

M=10**40
Rmin=[0]*N
for i in range(N-1,-1,-1):
    M=Rmin[i]=min(M,A[i])

alpha=10**40
for i in range(1,N-1):
    if Lmin[i-1]<A[i] and A[i]>Rmin[i+1]:
        alpha=min(alpha,Lmin[i-1]+A[i]+Rmin[i+1])

beta=10**40
for i in range(1,N-1):
    a=A[i]
    P=Binary_Search_High_Value(A[:i],a,equal=False)
    Q=Binary_Search_High_Value(A[i+1:],a,equal=False)
    if P!=None and Q!=None:
        beta=min(beta,P+Q+a)

print(min(alpha,beta))