<p>Given an integer array <code>nums</code>, return the sum of <code>floor(nums[i] / nums[j])</code> for all pairs of indices <code>0 &lt;= i, j &lt; nums.length</code> in the array. Since the answer may be too large, return it <strong>modulo</strong> <code>10<sup>9</sup> + 7</code>.</p>

<p>The <code>floor()</code> function returns the integer part of the division.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [2,5,9]
<strong>Output:</strong> 10
<strong>Explanation:</strong>
floor(2 / 5) = floor(2 / 9) = floor(5 / 9) = 0
floor(2 / 2) = floor(5 / 5) = floor(9 / 9) = 1
floor(5 / 2) = 2
floor(9 / 2) = 4
floor(9 / 5) = 1
We calculate the floor of the division for every pair of indices in the array then sum them up.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [7,7,7,7,7,7,7]
<strong>Output:</strong> 49
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
	<li><code>1 &lt;= nums[i] &lt;= 10<sup>5</sup></code></li>
</ul>

class Solution:
    
    MOD = 10**9 + 7
   
    def sumOfFlooredPairs(self, nums):
        # Initialize an array to keep track of count for each number
        N = max(nums)
        count = [0] * (N + 1)
       
        # Count occurrences of each number in the input list
        for num in nums:
            count[num] += 1
           
        # Calculate cumulative count for each number
        for i in range(1, N + 1):
            count[i] += count[i - 1]
       
        ans = 0
        for i in range(1, N + 1):
            if count[i] - count[i - 1] > 0:
                sum_val = 0
                # Iterate over multiples of i (i * j) up to N
                for j in range(1, (N // i) + 1):
                    low = i * j
                    high = min(i * (j + 1) - 1, N)
                   
                    # Calculate the count of numbers in the range [low, high]
                    cnt = count[high] - count[low - 1]
                    
                   
                    # Update the sum_val
                    sum_val = (sum_val + (cnt * j) % self.MOD) % self.MOD
               
                # Calculate the contribution of the current number
                curr = count[i] - count[i - 1]
                
                ans = (ans + (curr * sum_val) % self.MOD) % self.MOD
       
        return ans

28700