#include <stdio.h>
#define MAX_N  1000

void QuickSort(int, int);
int Partition(int, int);
int MinimumCost(int);

struct rist
{
  int n;
  int p;
} typedef rist;

rist A[MAX_N];

int main()
{
	int i;
	int n;
	int cost;
	
	scanf("%d", &n);
	for(i = 0; i < n; i++)
	{
		scanf("%d", &A[i].n);
		A[i].p = i;
	}
	
	QuickSort(0, n - 1);
	cost = MinimumCost(n);
	
	printf("%d\n", cost);
	
	return 0;
}

void QuickSort(int p, int r)
{
	int q;

	if(p < r)
    {
      q = Partition(p, r);
      QuickSort(p, q - 1);
      QuickSort(q + 1, r);
    }
}

int Partition(int p, int r)
{
	int i, j;
	rist tmp;

	i = p - 1;
	for(j = p; j < r; j++)
    {
    	if(A[j].n < A[r].n)
		{
	 		i = i + 1;
	 		tmp = A[i];
	  		A[i] = A[j];
	  		A[j] = tmp;
		}
    }
	tmp = A[i + 1];
  	A[i + 1] = A[r];
  	A[r] = tmp;
  
  	return i + 1;
}

int MinimumCost(int n)
{
	int i;
	int tmp;
	int cost;
	
	for(i = n - 1; i >= 0; i--)
	{
		if(A[i].p != i)
		{
			cost += A[i].n + A[A[i].p].n;

			tmp = A[A[i].p].p;
			A[A[i].p].p = A[i].p;
			A[i].p = tmp;
		}
	}
	return cost;
}