fs = require("fs");

buf = fs.readFileSync('/dev/stdin').toString();
lines = buf.split('\n');
w = lines[1].split(' ').map(Number);

sorted = [].concat(w).sort((a, b) => { return a - b; });

indeces = w.map((x) => { return sorted.indexOf(x); });

groups = (() => {
    let done = new Array(w.length); // undefined or true
    let res = [];
    for (let i = 0; i < w.length; ++i) {
        if (done[i]) continue;
        let g = [];
        let j = i;
        while (!done[j]) {
            done[j] = true;
            g.push(w[j]);
            j = indeces[j];
        }
        res.push(g);
    }
    return res;
})();

groups = groups
    .filter((g) => { return g.length >= 2; })
    .map((g) => { return g.sort((a, b) => { return a - b; }); });

function sum(ary) { return ary.reduce((a, b) => { return a + b; }, 0); }

function calc_cost(group, min) {
    let min1 = sum(group.slice(1)) + group[0] * (group.length - 1);
    let min2 = sum(group) + group[0] + min * (group.length + 1);
    //console.log("group.slice(1) = ", group.slice(1));
    //console.log("min1 = ", min1, ", min2 = ", min2);
    return Math.min(min1, min2);
}

cost = sum(groups.map((g) => { return calc_cost(g, sorted[0]); }));

//console.log(w);
//console.log(sorted);
//console.log(indeces);
//console.log(groups);
console.log(cost);
