import java.io.*;
import java.util.*;

public class ReinierTranscribed {
    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
            new ReinierTranscribed().run(reader);
        }
    }

    public void run(BufferedReader reader) throws IOException {
        int n = Integer.parseInt(reader.readLine());

        long[] A = new long[n];
        String[] As = reader.readLine().split(" ");
        for (int i = 0; i < As.length; i++) {
            A[i] = Long.parseLong(As[i]);
        }

        Stack<S> B = new Stack<>();
        for (long a : A) {
            S as = new S(1, -2*a, a*a);
            while (B.size() > 0 && B.peek().intersect(as)) {
                as = B.pop().merge(as);
            }
            B.add(as);
        }

        long res = 0;
        for (S s : B) {
            res += s.getScore();
        }
        System.out.println(res);
    }

    long floordiv(long a, long b) {
        if (a >= 0 || a%b == 0) {
            return a/b;
        } else {
            return a/b-1;
        }
    }

    class S {
        long a, b, c;

        public S(long a, long b, long c) {
            this.a = a;
            this.b = b;
            this.c = c;
        }

        long getStart() {
            return floordiv(a-b,2*a);
        }

        long getScore() {
            long x = getStart();
            return a*x*x + b*x + c;
        }

        boolean intersect(S s) {
            return getStart()+a >= s.getStart();
        }

        S merge(S s) {
            return new S(a+s.a, b+2*a*s.a+s.b, c+a*a*s.a+a*s.b+s.c);
        }
    }
}
