#include <stdio.h>
#include <stdlib.h>

#define MAX 100000

// Stack structure
typedef struct {
    int items[MAX];
    int top;
} Stack;

void init(Stack *s) {
    s->top = -1;
}

int isEmpty(Stack *s) {
    return s->top == -1;
}

void push(Stack *s, int val) {
    if (s->top < MAX - 1) {
        s->items[++(s->top)] = val;
    }
}

int pop(Stack *s) {
    if (!isEmpty(s)) {
        return s->items[(s->top)--];
    }
    return -1;
}

// Compare for descending order
int cmpdesc(const void *a, const void *b) {
    return ((int)b - (int)a);
}

int main() {
    int k;

    if (scanf("%d", &k) != 1 || k <= 0 || k > MAX) {
        printf("Invalid input\n");
        return 0;
    }

    int arr[k];
    for (int i = 0; i < k; i++) {
        if (scanf("%d", &arr[i]) != 1 || arr[i] <= 0) {
            printf("Invalid input\n");
            return 0;
        }
    }

    // Sort in descending order
    qsort(arr, k, sizeof(int), cmpdesc);

    // Push into stack
    Stack s;
    init(&s);
    for (int i = 0; i < k; i++) {
        push(&s, arr[i]);
    }

    // Check triples from stack top
    for (int i = 0; i < k - 2; i++) {
        int a = arr[i], b = arr[i+1], c = arr[i+2];
        if (a < b + c) {   // Triangle inequality satisfied
            printf("%d\n", a);
            return 0;
        }
    }

    // If no valid triplet
    printf("-1\n");
    return 0;
}