== Use file marking ==
Mark the desired files, then type '* N' to see their combined size in the mini-buffer.

== Use package Diredc ==
Marking or tagging files gives an automatic running tally in the header line

== Calling an external process `du` ==
* Within Dired, mark the files, press `! du -sh`

* With an elisp function and custom keybinding:

 (defun dired-get-size ()
  (interactive)
  (let ((files (dired-get-marked-files)))
    (with-temp-buffer
      (apply 'call-process "/usr/bin/du" nil t nil "-sch" files)
      (message "Size of all marked files: %s"
               (progn 
                 (re-search-backward "\\(^[0-9.,]+[A-Za-z]+\\).*total$")
                  (match-string 1))))))
 
 (define-key dired-mode-map (kbd "?") 'dired-get-size)

* An inferior example, admittedly only display MB and that even not accurate

 (defun cdrw-get-size ()
  (interactive)
  (let ((sum 0)
        (files (dired-get-marked-files)))
   (dolist (file files (format "%.1fM" sum))
    (incf sum (/ (nth 8 (car 
      (directory-files-and-attributes (file-name-directory file) nil 
        (regexp-quote (file-name-nondirectory file))))) 1048576.0)))))


* A third example in elisp
                
    (defun file-size (filename)
      "Return size of file FILENAME in bytes.
    The size is converted to float for consistency.
    This doesn't recurse directories."
      (float
       (file-attribute-size			; might be int or float
	(file-attributes filename))))

    (defun file-size-total (filename-list)
      "Return the sum of sizes of FILENAME-LIST in bytes."
      (apply '+
	     (mapcar 'file-size
		     filename-list)))

    (defun dired-size-of-marked-files ()
      "Print the total size of marked files in bytes."
      (interactive)
      (message "%.0f"
	       (file-size-total (dired-get-marked-files))))
