#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int MAXV = 1000000;

int n, m;
vector<vector<int>> a;
vector<vector<int>> comp;
vector<vector<ll>> ans;

vector<vector<pair<int,int>>> components;
vector<int> freq(MAXV + 1, 0);

int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};

void dfs(int x,int y,int id)
{
    comp[x][y]=id;
    components[id].push_back({x,y});

    for(int k=0;k<4;k++)
    {
        int nx=x+dx[k];
        int ny=y+dy[k];

        if(nx<0||ny<0||nx>=n||ny>=m) continue;
        if(comp[nx][ny]!=-1) continue;
        if(a[nx][ny]==-1) continue;          // blocked cell

        dfs(nx,ny,id);
    }
}

int main()
{
    cin>>n>>m;

    a.assign(n, vector<int>(m));
    comp.assign(n, vector<int>(m,-1));
    ans.assign(n, vector<ll>(m,0));
ll block = 0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>a[i][j];

            if(a[i][j]>=0)
                freq[a[i][j]]++;
            else block++;    
        }
    }

    // Find connected components
    int id=0;
    components.resize(n*m);

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(a[i][j]>=0 && comp[i][j]==-1)
            {
                dfs(i,j,id);
                id++;
            }
        }
    }

    components.resize(id);
   ll tot = 0;
    // Process every component
    for(auto &cells: components)
    {
        // Remove current component from frequency table
        for(auto [x,y]:cells)
        {
            freq[a[x][y]]--;
        }
      
        // Compute answers
        for(auto [x,y]:cells)
        {
            int val=a[x][y];
            ll sum=0;

            for(int multiple=val;multiple<=MAXV;multiple+=val)
            {
                sum += 1LL * multiple * freq[multiple];
            }

           tot+=sum;
        }

        // Restore frequencies
        for(auto [x,y]:cells)
        {
            freq[a[x][y]]++;
        }
    }

   cout<<tot-block;
    return 0;
}