const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    let params = [];
    while ((line = await readline())) {
        let tokens = line.split(" ");
        // let a = parseInt(tokens[0]);
        // let b = parseInt(tokens[1]);
        // console.log(a + b);
        params.push(tokens);
    }
    // console.log(params)
    let n = parseInt(params[0][0]);
    let arr = params[1].map((v) => parseInt(v));
    // console.log(n,arr)
    let MOD = BigInt(Math.pow(10, 9) + 7);
    // console.log(MOD)
    // 树状数组求子序列
    class Fenwick {
        constructor(size) {
            this.size = size;
            this.tree = new Array(size + 1).fill(0);
        }
        update(i, delta) {
            while (i <= this.size) {
                this.tree[i] += delta;
                i += i & -i;
            }
        }
        query(i) {
            let ans = 0;
            while (i > 0) {
                ans += this.tree[i];
                i -= i & -i;
            }
            return ans;
        }
    }
    // 去重和离散化
    let sortedArr = [...new Set(arr)].sort((a, b) => a - b);
    let rankMap = new Map();
    sortedArr.forEach((v, index) => {
        rankMap.set(v, index + 1);
    });
    let sum = 0;
    let fenwick = new Fenwick(sortedArr.length);
    for (let i = arr.length - 1; i >= 0; i--) {
        let rank = rankMap.get(arr[i]);
        sum += fenwick.query(rank - 1);
        fenwick.update(rank, 1);
    }
    sum = BigInt(sum)
    let power = BigInt(1);
    // 计算2^(n-2) mod MOD(快速幂算法)
    let exponent = BigInt(n - 2);
    let base = 2n;
    while (exponent > 0) {
        if (exponent & 1n) {
            power = (power * base) % MOD;
        }
        base = base * base;
        exponent >>=1n
    }
    console.log(Number(((sum % MOD) * power) % MOD));
})();