I was curious, so I [`microtime`](http://php.net/manual/de/function.microtime.php)d it with three post types and about 120 posts shared across them. Comparing three [`wp_count_posts()`](https://developer.wordpress.org/reference/functions/wp_count_posts/) calls with one [`get_posts()`](https://developer.wordpress.org/reference/functions/get_posts/) call. If you make use of the `fields` parameter of the latter, with the value `ids`, then they are about the same speed, otherwise it is 30 times slower. The `get_posts()` method is possibly in the 95% rang in comparison, so it might be a little bit faster, but I didn't run nearly enough iterations to have a conclusive result. So I would say you can do it either way.

    // use either
	$p1c = wp_count_posts( 'post-type-1' )->publish;
	$p2c = wp_count_posts( 'post-type-2' )->publish;
	$p3c = wp_count_posts( 'post-type-3' )->publish;
	$res = $p1c + $p2c + $p3c;
    //alternatively
	$pts = [ 'product', 'post', 'page' ];
	$res = 0;
	foreach ( $pts as $pt) {
		$res = $res + wp_count_posts( $pt )->publish;
	}

    // or use this
    $res = count( get_posts( [ 
      'post_type' => [ 'product', 'post', 'page' ], 
      'posts_per_page' => -1, 
      'fields' => 'ids' 
    ] ) );